import { HttpException, HttpStatus, Injectable } from '@nestjs/common'
import { CreateRoleDto } from './dto/create-role.dto'
import { UpdateRoleDto } from './dto/update-role.dto'
import { InjectRepository } from '@nestjs/typeorm'
import { Roles } from './roles.entity'
import { Repository } from 'typeorm'

@Injectable()
export class RolesService {
  //创建一个与其交互的数据库仓库(repository:存储库) 这个仓库会提供用于操作数据库的标准方法
  constructor(@InjectRepository(Roles) private readonly rolesRepository: Repository<Roles>) {}

  async create(createRoleDto: CreateRoleDto) {
    const role = this.rolesRepository.create(createRoleDto)
    return await this.rolesRepository.save(role)
  }

  async findAll() {
    return await this.rolesRepository.find()
  }

  async findOne(id: number) {
    return await this.rolesRepository.findOne({ where: { id } })
  }

  async update(id: number, updateRoleDto: UpdateRoleDto) {
    // update方法只适合单模型的更新，不适合有关系的模型更新
    // return await this.rolesRepository.update(id, updateRoleDto)
    const role = await this.findOne(id)
    if (role) {
      //merge: 合并两个对象，类似于Object.assign()，将user的属性合并到userTemp中
      // 两个参数：第一个参数：目标实体，是数据库中查询到的实例  第二个参数：源数据，包含要更新字段的对象
      const tempRole = this.rolesRepository.merge(role, updateRoleDto)
      return await this.rolesRepository.save(tempRole)
    } else {
      throw new HttpException('该数据不存在', HttpStatus.NOT_FOUND)
    }
  }

  async remove(id: number) {
    const role = await this.findOne(id)
    if (role) {
      await this.rolesRepository.delete(id)
      return ` 角色名为'${role.name}' 的数据已删除`
    } else {
      throw new HttpException('该数据不存在', HttpStatus.NOT_FOUND)
    }
  }
}
